package com.tecnoagrosoft.zafra.control.activity.fragment;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;



import com.tecnoagrosoft.zafra.control.activity.R;
import com.tecnoagrosoft.zafra.control.db.GenericManager;
import com.tecnoagrosoft.zafra.control.db.GestorDB;
import com.tecnoagrosoft.zafra.control.model.android.ItemsList;
import com.tecnoagrosoft.zafra.control.utils.AdaptadorList;
import com.tecnoagrosoft.zafra.control.utils.NameTable;
import com.tecnoagrosoft.zafra.control.utils.UtilsGeneric;

import android.app.Dialog;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;

public class NotificacionFragment extends Fragment {

	View rootView;
	private ListView lista;
	GestorDB gestorDB;
	private int tabla_id = 0;
	private int mensaje_id = 0;
	private String nombre_tabla="";
	
	final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
	Calendar cal = Calendar.getInstance();
	final Date today = cal.getTime();

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		rootView = inflater.inflate(R.layout.fragment_notificacion, container, false);

		loadtable();

		return rootView;
	}

	/**
	 * carga la lista de parcelas en listview
	 */
	private void loadtable() {

		ArrayList<ItemsList> datos = new ArrayList<ItemsList>();

		// contexto del activity
		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);

		String[] columns = { "_id", "nombre_tabla", "tabla_id", "descripcion", "finalizado", "titulo" };
		Cursor c = gM.getObjectWhere("mensaje", columns,"finalizado=0");

		if (c.moveToFirst()) {

			do {

				datos.add(new ItemsList(Integer.parseInt(c.getString(0)), this.getImage(c.getString(c.getColumnIndex("nombre_tabla"))), c.getString(c.getColumnIndex("titulo")), c.getString(c
						.getColumnIndex("descripcion"))));

			} while (c.moveToNext());
		}else{
			datos.add(new ItemsList(0, R.drawable.seguimiento, getString(R.string.men_no_nofiticaciones),getString(R.string.graciasConfiar) ));
		}

		// cierro la conexion
		c.close();
		gM.close();
		db.close();
		gestorDB.close();

		lista = (ListView) rootView.findViewById(R.id.ListView_notificaciones);
		lista.setAdapter(new AdaptadorList(rootView.getContext(), R.layout.item_list, datos) {
			@Override
			public void onEntrada(Object entrada, View view) {
				if (entrada != null) {
					TextView texto_id_item = (TextView) view.findViewById(R.id.texto_item_id);
					if (texto_id_item != null)
						texto_id_item.setText(((ItemsList) entrada).getId().toString());

					TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textoTitulo_item_list);
					if (texto_superior_entrada != null)
						texto_superior_entrada.setText(((ItemsList) entrada).getTextoTitulo());

					TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textoDescripcion_item_list);
					if (texto_inferior_entrada != null)
						texto_inferior_entrada.setText(((ItemsList) entrada).getTextoDescripcion());

					ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imagen_item_list);
					if (imagen_entrada != null)
						imagen_entrada.setImageResource(((ItemsList) entrada).getIdImagen());
				}
			}
		});

		lista.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {
				ItemsList elegido = (ItemsList) pariente.getItemAtPosition(posicion);
				dialogNotificaciones(elegido.getId());
			}
		});

	}

	private int getImage(String nameTable) {
		int n = 0;

		NameTable nameT = NameTable.valueOf(nameTable); // surround with
														// try/catch

		switch (nameT) {
		case aplicacion:
			n = R.drawable.parcela2;

			break;
		case seguimiento_de_parcela:
			n = R.drawable.seguimiento;

			break;
		case parcela:
			n = R.drawable.parcela;
			break;
		default:
			break;

		}

		return n;

	}

	private void dialogNotificaciones(int id) {

		final Dialog dialog = new Dialog(rootView.getContext());
		boolean exit = true;

		dialog.setContentView(R.layout.fragment_dialog_notification);
		dialog.setTitle(R.string.title_dialog_noficaciones);

		TextView titulo = (TextView) dialog.findViewById(R.id.textViewTitulo);
		TextView descripcion = (TextView) dialog.findViewById(R.id.textViewDescripcion);

		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);

		String[] columns = { "_id", "nombre_tabla", "tabla_id", "descripcion", "finalizado", "titulo" };
		Cursor c = gM.getObjectById("mensaje", columns, id);

		if (c.moveToFirst()) {
			exit = false;
			mensaje_id=c.getInt(c.getColumnIndex("_id"));
			titulo.setText(c.getString(c.getColumnIndex("titulo")));
			descripcion.setText(c.getString(c.getColumnIndex("descripcion")));
			tabla_id=c.getInt(c.getColumnIndex("tabla_id"));
			nombre_tabla=c.getString(c.getColumnIndex("nombre_tabla"));

		}
		// Obtener los dasto

		final EditText valor = (EditText) dialog.findViewById(R.id.editTextValor);
		
		

		// cierro la conexion
		c.close();
		gM.close();
		db.close();
		gestorDB.close();
		
		if (exit) {//si no se cumple sale
			return;
		}

		dialog.show();

		// acceptar
		Button acceptarButton = (Button) dialog.findViewById(R.id.btn_acept);
		acceptarButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// Close dialog

				valor.setError(null);

				View focusView = UtilsGeneric.validator(valor, 2, 3, rootView.getContext());
			
				if (focusView != null) {
					focusView.requestFocus();
				} else {
					 executeAction(nombre_tabla,tabla_id,mensaje_id,valor.getText().toString());
					 ///////////////////////////////
					 dialog.dismiss();
					 loadtable();
				}
				
			}
		});
		// cancelar
		Button cancelarButton = (Button) dialog.findViewById(R.id.btn_cancel);
		cancelarButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// Close dialog
				dialog.cancel();
			}
		});

	}
	
	
	private int executeAction(String nameTable,int table_id,int mensaje_id,String valor) {
		int n = 0;

		NameTable nameT = NameTable.valueOf(nameTable); // surround with
														// try/catch

		switch (nameT) {
		case aplicacion:
			

			break;
		case seguimiento_de_parcela:
			
			ContentValues reg = new ContentValues();

			reg.put("cantidad_germinada_m2", valor);
			reg.put("is_version",isVersion(table_id,nameTable) +1);
			update(nameTable,  reg, table_id);
		    Toast.makeText(rootView.getContext(), getString(R.string.men_explication_semilla_metro_lineal_save), Toast.LENGTH_LONG).show();

			break;
		case parcela:
			
			break;
		default:
			break;

		}

		
		ContentValues reg = new ContentValues();
		reg.put("fecha_ejecucion", df.format(today));
		reg.put("finalizado", 1);
		reg.put("is_version",isVersion(mensaje_id,"mensaje") +1);
		update("mensaje",  reg, mensaje_id);

		
		return n;

	}
	
	
	/**
	 * metodo de actuliar
	 * @param nameTable
	 * @param reg
	 * @param _rowIndex
	 */
	private void update(String nameTable, ContentValues reg,Integer _rowIndex) {

		GestorDB gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();
		GenericManager gM = new GenericManager(db);
		gM = new GenericManager(db);

		gM.updateObject(nameTable, reg, _rowIndex);
		//Toast.makeText(AplicacionActivity.this, R.string.men_update,Toast.LENGTH_SHORT).show();

		gM.close();
		db.close();
		gestorDB.close();

	}
	
	
	/**
	 * versionar la tabla
	 * 
	 * @param idLocal
	 * @param nameTable
	 * @return
	 */
	private int isVersion(int idLocal, String nameTable) {
		int version = 0;

		gestorDB = new GestorDB(rootView.getContext());
		SQLiteDatabase db = gestorDB.getWritableDatabase();

		GenericManager gM = new GenericManager(db);
		String[] columnsU = { "_id", "is_version" };
		Cursor cu = gM.getObjectById(nameTable, columnsU, +idLocal);
		if (cu.moveToFirst()) {
			version = cu.getInt(cu.getColumnIndex("is_version"));
		}
		cu.close();
		gM.close();
		db.close();
		gestorDB.close();

		return version;
	}
	

}
